package com.hsc.offer;

/**
 * @author
 * @date 2025-06-18
 * @Description 13.输入一个整数数组，实现一个函数来调整该数组中数字的顺序，使得所有的奇数位于数组的前半部分，所有的偶数位于数组的后半部分，并保证奇数和奇数，偶数和偶数之间的相对位置不变。
 * 此题类似数组排序，只不过不是从小到大排序，而是奇数在前，偶数在后的排序。
 * 所以这道题的代码的基础，应该是数组排序代码的基础，只需要修改一个交换的判断。
 * 在数组排序中（假设从小到大排序），如果前面的数大于后面的数，则需要交换。
 * 在此题中，需要交换的情景如下：
 * 奇数，奇数—>不需交换，同是奇数要保持先后顺序
 * 偶数，偶数—>不需交换，同是偶数要保持先后顺序
 * 奇数，偶数—>不需交换，奇数就应该在偶数前面，所以不用交换
 * 偶数，奇数—>需要交换
 */
public class OfferTest8 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        new OfferTest8().reOrderArray(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
        }
    }

    public void reOrderArray(int[] array) {
        // 类似冒泡排序

        // 外层轮次循环
        for (int i = 1; i < array.length; i++) {
            // 每个元素挨个比较 多轮比较 每次冒泡出一个最大的值
            // 这里只是把排序的过程 变成了 奇数和偶数 进行比较交换
            // 所以每次比较完一轮  比较的数组位置减少
            for (int j = 0; j < array.length - i; j++) {
                // 如果 当前元素是偶数 下一个元素是奇数 则进行交换 把奇数放在数组的前半部分
                // array[j] % 2 == 0 偶数
                // array[j + 1] % 2 == 1 奇数
                if (array[j] % 2 == 0 && array[j + 1] % 2 == 1) {
                    // 交换
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
    }


}
